package com.hzit.manager.controller;

import com.hzit.manager.service.ISentinelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.TimeUnit;

/**
 * 类名：
 * 作者：WF
 * 功能：
 */
@RestController
@RequestMapping("/sentinel")
public class SentinelController {
	@Autowired
	private ISentinelService sentinelService;

	//1. 获取资源的第一处方案
	@GetMapping("/res1")
	public String res1(){
		sentinelService.res1();
		return "res1";
	}
	//2. 获取资源的第二种方案
	@GetMapping("/res2")
	public String res2(){
		sentinelService.res2();
		return "res2";
	}
	//3. 使用@SentinelResource注解定义并处理资源（处理BlockException）
	// /setntinel/res3--->res3
	@GetMapping("/res3")
	public String res3(){
		sentinelService.res3();
		return "res3";
	}
	//4. 使用@SentinelResource注解定义并处理资源（处理任意Exception）
	@GetMapping("/res4")
	public String res4(){
		sentinelService.res4();
		return "res4";
	}

	//5. 限流分类之---关联限流 （关联资源限流，影响到请求资源）
	@GetMapping("/res5")
	public String res5(){
		System.out.println("资源res5...");
		return "res5";
	}
	//5. 限流分类之---关联限流
	@GetMapping("/res6")
	public String res6(){
		System.out.println("资源res6...");
		return "res6";
	}

	//6. 限流分类之---链路限流 （针对入口来源）
	@GetMapping("/res7")
	public String res7(){
		sentinelService.message();     // 内部的资源名为：message
		System.out.println("资源/sentinel/res7...");
		return "res7";
	}
	//6. 限流分类之---链路限流
	@GetMapping("/res8")
	public String res8(){
		sentinelService.message();     // 内部的资源名为：message
		System.out.println("资源/sentinel/res8...");
		return "res8";
	}
	//7. 熔断、降级--》慢调用比例
	@GetMapping(value = "/testB")
	public String testB() throws InterruptedException {
		TimeUnit.SECONDS.sleep(1);
		return "testB";
	}
	//8. 熔断、降级--》异常比例
	@GetMapping(value = "/testD")
	public String testD(int id){
		if(id<0){
			throw new RuntimeException("运行异常");
		}
		return "testD";
	}


}
